package br.ufc.si.sax;

import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import br.ufc.si.model.Licitacao;



public class ListarLicitacoes extends DefaultHandler {
	private Licitacao licitacao;
	private ArrayList<Licitacao> ListLicitacao = new ArrayList<Licitacao>();
	private String temp;

	public ArrayList<Licitacao> ListarLicitacao(String codigo, String ano) {
		Parser(codigo, ano);
		return ListLicitacao;
	}

	private void Parser(String codigo, String ano) {
		SAXParserFactory spf = SAXParserFactory.newInstance();
		SAXParser parser;
		try {

			parser = spf.newSAXParser();
			parser.parse("http://api.tcm.ce.gov.br/sim/1_0/licitacoes.xml?codigo_municipio=" + codigo +"&data_realizacao_autuacao_licitacao=" + ano, this);

		} catch (SAXException e) {
			System.out.println("SAX exception = [[" + e.getMessage() + "]]");
		} catch (IOException e) {
			System.out.println("I/O exception = [[" + e.getMessage() + "]]");
		} catch (ParserConfigurationException e) {
			System.out.println("ParserConfig exception = [[" + e.getMessage()
					+ "]]");
		}

	}
	
	public void startDocument() throws SAXException{
		
	}

	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {

		if (qName.equalsIgnoreCase("codigo_municipio")) {
			licitacao = new Licitacao();
			licitacao.setCodigo_municipio("codigo_municipio");
		}
	}

	public void characters(char[] buffer, int start, int length)
			throws SAXException {
		temp = new String(buffer, start, length);
	}

	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (qName.equalsIgnoreCase("licitacoes")) {
			// add it to the list
			ListLicitacao.add(licitacao);

		} else if (qName.equalsIgnoreCase("data_realizacao_autuacao_licitacao")) {
			licitacao.setData_realizacao(temp);

		} else if (qName.equalsIgnoreCase("descricao1_objeto_licitacao")) {
			licitacao.setDescricao(temp);
			
		}else if(qName.equalsIgnoreCase("cpf_gestor")){
			licitacao.setCpf_gestor(temp);
			
		}else if(qName.equalsIgnoreCase("nome_responsavel_homologacao")){
			licitacao.setNome_responsavel(temp);
		}
		else if(qName.equalsIgnoreCase("valor_orcado_estimado")){
			licitacao.setValor_orcado_estimado(Double.parseDouble(temp));
		}
		else if(qName.equalsIgnoreCase("valor_limite_superior")){
			licitacao.setValor_limite_superior(Double.parseDouble(temp));
		}
	}
}
